package com.cicoding.doc.impl;

import com.cicoding.doc.DocService;
import freemarker.template.Configuration;
import freemarker.template.Template;
import org.apache.tomcat.util.http.fileupload.IOUtils;
import org.springframework.core.io.ClassPathResource;

import java.io.*;
import java.util.Map;

public class DocServiceImpl implements DocService {
    @Override
    public void generateCommonDoc() {

    }


    /**
     * 将数据导入word模板生成word
     *
     * @param params             数据
     * @param templateFileNumber 1-模板 2-模板 3- 模板
     * @return docx临时文件的全路径
     * @throws IOException
     */
    public static String createWord(Map<String, Object> params, Integer templateFileNumber) throws IOException {
        String templateFile = null;
        //指定模板
        if (templateFileNumber == 1) {
            templateFile = "fortest.xml";
        }
        File file = null, templateFile1 = null;
        FileOutputStream fileOutputStream = null;
        Writer out = null;
        InputStream inputStream = null;
        try {
            //指定模板存放位置
            ClassPathResource tempFileResource = new ClassPathResource("doc/" + templateFile);
            //创建临时文件
            file = File.createTempFile(templateFile, ".docx");
            //得到临时文件全路径  ,作为word生成的输出全路径使用
            String outputDir = file.getAbsolutePath();
//            log.info("创建临时文件的路径为:{}", outputDir);

            //创建模板临时文件
            templateFile1 = File.createTempFile(templateFile, ".xml");
            fileOutputStream = new FileOutputStream(templateFile1);
            inputStream = tempFileResource.getInputStream();
            IOUtils.copy(inputStream, fileOutputStream);
            //得到临时模板文件全路径
            String templateFilePath = templateFile1.getAbsolutePath();
//            log.info("创建临时文件的路径为:{}", templateFilePath);

//           new ClassPathResource("aaa").getInputStream().close();
            // 设置FreeMarker的版本和编码格式
            Configuration configuration = new Configuration();
            configuration.setDefaultEncoding("UTF-8");
            // 设置FreeMarker生成Word文档所需要的模板的路径
            configuration.setDirectoryForTemplateLoading(templateFile1.getParentFile());
            // 设置FreeMarker生成Word文档所需要的模板
            Template t = configuration.getTemplate(templateFile1.getName(), "UTF-8");

            // 创建一个Word文档的输出流
            out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(new File(outputDir)), "UTF-8"));
            //FreeMarker使用Word模板和数据生成Word文档
            t.process(params, out); //将填充数据填入模板文件并输出到目标文件
        } catch (Exception e) {
//            log.error("word生成报错,错误信息{}", e.getMessage());
            e.printStackTrace();
        } finally {
            if (out != null) {
                out.flush();
                out.close();
            }
            if (inputStream != null) {
                inputStream.close();
            }
            if (fileOutputStream != null) {
                fileOutputStream.close();
            }
            if (templateFile1 != null) {
                templateFile1.delete();
            }
        }
        return file == null ? null : file.getAbsolutePath();
    }
}
